#ifndef UTIL_H
#define UTIL_H
#include<parse_header.h>
#include <mysql/jdbc.h>
#include<pojo.h>
#include<iniparser.h>
#include<pcap.h>
#define config_path "./config.ini"

std::vector<Info> infoList;//信息列表
int count1=0;//计数器


//加载配置文件
dictionary * loadConfigFile(){
    dictionary * ini=iniparser_load(config_path);
    if(!ini){
        throw std::runtime_error("配置文件加载错误！");
    }
    return  ini;
}

//读char*
const char* getConfigChar(char* param){
    dictionary*ini= loadConfigFile();
    const char* string_param = iniparser_getstring(ini, param, nullptr);
    delete(ini);
    return string_param;

}

//读int
int getConfigInt(char*param){
    dictionary*ini= loadConfigFile();
    int int_param = iniparser_getint(ini, param, 0);
    delete(ini);
    return int_param;
}

//获取本机的网络接口
const char*  get_local_net(){
    char *dev;
    char errbuf[1024];
    dev=pcap_lookupdev(errbuf);
    if(dev==NULL){
        printf("自动获取网络接口失败!%s\n",errbuf);
        return getConfigChar("libpcap:interface");
    }
    return dev ;
}


//打开网络接口
pcap_t* open_net(const char*dev){
    int promise=getConfigInt("libpcap:is_mix");//设置为混杂模式/非混杂
    int dtime=0;//设置等待时间为直到有数据包来
    char errbuf[100]="";//出错信息
    pcap_t *pcap_handle=pcap_open_live(dev,BUFSIZ,promise,dtime,errbuf);//打开会话
    if(pcap_handle==NULL){
        printf("打开网络接口失败：%s\n",errbuf);
        exit(0);
    }
    return pcap_handle;
}
//保存数据包
void save_pktfile(u_char *outfile_handle, const struct pcap_pkthdr *header, const u_char *pkt_data) {

pcap_dump(outfile_handle, header, pkt_data); // 将数据包保存到文件
std::cout<<"保存成功"<<std::endl;

}




#endif // UTIL_H

